Rubyでloggerを使い、ログを出力してみた
サーモン大好き横山です。
Rubyスクリプトからログを出力する際、 logger
を使ってログ出力してみた時のメモです。
準備
今回Amazon Linux 2015.09を使いました。
$ cat /etc/os-release NAME="Amazon Linux AMI" VERSION="2015.09" ID="amzn" ID_LIKE="rhel fedora" VERSION_ID="2015.09" PRETTY_NAME="Amazon Linux AMI 2015.09" ANSI_COLOR="0;33" CPE_NAME="cpe:/o:amazon:linux:2015.09:ga" HOME_URL="http://aws.amazon.com/amazon-linux-ami/" $ ruby -v ruby 2.0.0p647 (2015-08-18) [x86_64-linux]
サンプル
以下のコードを準備します。
Logger.new(...)
でインスタンスを作成した時点では、すべてのログレベルで出力しますが、 log.level
で出力ログレベルを指定し、出力するログを制限することが出来ます。
ログレベルは、 DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
の順番です。1
ソースコード
#!/usr/bin/env ruby require 'logger' log = Logger.new('/tmp/log') log.debug('debug') log.info('info') log.warn('warn') log.error('error') log.fatal('fatal') log.unknown('='*80) log.level=Logger::INFO log.debug('debug') log.info('info') log.warn('warn') log.error('error') log.fatal('fatal') log.unknown('='*80) log.level=Logger::FATAL log.debug('debug') log.info('info') log.warn('warn') log.error('error') log.fatal('fatal') log.unknown('+'*80)
実行結果
$ ruby log.rb $ cat /tmp/log # Logfile created on 2015-09-29 06:00:41 +0000 by logger.rb/41954 D, [2015-09-29T06:00:41.226365 #12428] DEBUG -- : debug I, [2015-09-29T06:00:41.226405 #12428] INFO -- : info W, [2015-09-29T06:00:41.226451 #12428] WARN -- : warn E, [2015-09-29T06:00:41.226470 #12428] ERROR -- : error F, [2015-09-29T06:00:41.226484 #12428] FATAL -- : fatal A, [2015-09-29T06:00:41.226499 #12428] ANY -- : ================================================================================ I, [2015-09-29T06:00:41.226515 #12428] INFO -- : info W, [2015-09-29T06:00:41.226528 #12428] WARN -- : warn E, [2015-09-29T06:00:41.226541 #12428] ERROR -- : error F, [2015-09-29T06:00:41.226554 #12428] FATAL -- : fatal A, [2015-09-29T06:00:41.226566 #12428] ANY -- : ================================================================================ F, [2015-09-29T06:00:41.226581 #12428] FATAL -- : fatal A, [2015-09-29T06:00:41.226595 #12428] ANY -- : ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ただ、ログを残す場所に注意が必要です。 書き込み権限のない場所や、ディレクトリが存在しない場所にログを書こうとするとエラーになります。
``` shell $ cp -rp log.rb{,.orig} $ vim log.rb $ diff -u log.rb{.orig,} --- log.rb.orig 2015-09-29 06:00:37.493442154 +0000 +++ log.rb 2015-09-29 06:04:55.528613682 +0000 @@ -2,7 +2,7 @@
require 'logger'
-log = Logger.new('/tmp/log') +log = Logger.new('/root/log')
log.debug('debug') log.info('info')
$ ruby log.rb
/usr/share/ruby/2.0/logger.rb:601:in initialize': Permission denied - /root/log (Errno::EACCES)
from /usr/share/ruby/2.0/logger.rb:601:in
open'
from /usr/share/ruby/2.0/logger.rb:601:in create_logfile'
from /usr/share/ruby/2.0/logger.rb:596:in
open_logfile'
from /usr/share/ruby/2.0/logger.rb:551:in initialize'
from /usr/share/ruby/2.0/logger.rb:318:in
new'
from /usr/share/ruby/2.0/logger.rb:318:in initialize'
from log.rb:5:in
new'
from log.rb:5:in `
サンプルレベルですが、Rubyのloggerの使い方の参考になれば幸いです。